public class code3 {
    public ListNode partition(ListNode head, int x) {
        // 这道题目是需要针对一个 x 值作为中间节点，将一整个链表进行分割
        // 简单的思路是
        // 可以创建出两个链表，分别存储相对较大和较小的值，之后再将两个链表进行连接即可
        ListNode smallNode = new ListNode(-1);
        ListNode sFlag = smallNode;
        ListNode bigNode = new ListNode(-1);
        ListNode bFlag = bigNode;

        // 创建出一个指针对链表进行扫描
        ListNode p = head;
        while(p != null) {
            // 进行判断添加操作
            if(p.val < x) {
                ListNode sNode = new ListNode(p.val);
                sFlag.next = sNode;
                sFlag = sFlag.next;
                p = p.next;
            } else {
                // 将大于等于 x 的值都存储到后面
                ListNode bNode = new ListNode(p.val);
                bFlag.next = bNode;
                bFlag = bFlag.next;
                p = p.next;;
            }
        }
        // 分类完成后，在来进行组装操作
        sFlag.next = bigNode.next;
        return smallNode.next;
    }
}
